#ifndef FILEWRITER_H
#define FILEWRITER_H

//Библиотека ffmpeg.
extern "C" {
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
};


//Библиотека Qt.
#include <QThread>
#include <QMutex>


//Объявление внешних классов.
class VidDevice;
class VidFrame;


class FileWriter : public QThread
{
	Q_OBJECT
public:
	enum VCODEC {MPEG1=0, MPEG4=1, MSMPEG4=2, SWF=3, FLV=4, FFV1=5, MOV=6};

	//Конструктор.
	FileWriter(QString devname, VidDevice *parent = NULL);

	//Деструктор.
	virtual ~FileWriter();

	//Функция установки наименования устройства.
	void setDeviceName(QString devname);

	//Функция записи данных в файл.
	void write(VidFrame *vidframe);

	//Функция остановки записи данных в файл.
	void stopWrite();

protected:
	//Функция активации нити.
	virtual void run();

private:
	bool isRecording;

	QString deviceName;

	//FFMPEG.
	AVFormatContext *fmtCtx;
	AVStream        *videoStream;
	AVCodecContext  *codecCtx;

	VCODEC vidCodec;

	uint8_t *outBuf;
	int outBufSize;

	VidFrame *vidFrame;

	QMutex mutex;

	//Функция активации записи в файл.
	void start(VidFrame *vidframe);

	//Функция остановки записи в файл.
	void stop();

	//Функция возврата выходного видеоформата.
	AVOutputFormat *getOutputFormat(QString *path_fbasename);

};

#endif
